【踩坑篇】提取权重

from tensorflow.python import pywrap_tensorflow

reader = pywrap_tensorflow.NewCheckpointReader('model.cpkt')
var_to_shape_map = reader.get_variable_to_shape_map()

在提取变量时,发现存在多个权重值,其展示如下图:并且每个权重有不同的个数。

首先,Adam变量产生的原因是使用Adam函数进行优化时,Adam函数会创建一个Adam变量,目的是保存graph中的可训练参数的动量

优化算法

说到动量,就得详细聊聊优化算法。所谓优化算法就是通过改善训练来最小化损失函数。通过不断迭代数据集,来计算损失函数并减少真实值和预测值的偏差成都。

  • 一阶优化:梯度下降
  • 二阶优化:Hessian方法

参考:https://zhuanlan.zhihu.com/p/27449596https://www.cnblogs.com/lee-yl/p/10022615.html

注意的几个点:

  1. 如果学习率较低,batch_size较小,频繁的更新会导致每次更新的梯度之间存在较大的方差,损失函数产生相对较高的波动,高波动会让损失函数更容易在全局内搜索最优解,避免局部最优。但是高方差震荡会导致最终结果难以稳定收敛,即需要耗费很长时间达到效果最优
  2. 随机梯度下降:θ=θ−η⋅∇(θ) × J(θ;x(i);y(i)),其中x(i)和y(i)为训练样本
  3. 动量(Minentum技术):V(t)=γV(t−1)+η∇(θ) × J(θ;x(i);y(i))
  4. 作为一个自适应的优化器,为什么tf.train.AdamOptimizer还需要learning_rate呢?

Adam

本质:利用梯度的一阶矩和二阶矩估计动态调整每个参数的学习率。

ϵ为epsilon,是为了避免分母为0的一个较小值

results matching ""

    No results matching ""